<?php 
defined('ACC')||exit('ACC Denied');
	/**
	*UserModel 类 继承自 Model类
	*/
class UserModel extends Model{
	protected $table='user';
	protected $primarykey='user_id';
	// protected static $salt=null;
	private $conf=array();
	protected $file=array('user_id','user_name','email','pwd','repwd','regtime','lastlogin','code');
	protected $autofill=array(array('regtime','func','time'));
	protected $_valid=array(
		array('user_name',1,'用户名不能为空','require'),
		array('email',1,'邮箱不能为空','require'),
		array('pwd',1,'密码不能为空','require'),
		array('user_name',2,'用户名必须为4到16个字符','length','4,16'),
		array('pwd',2,'密码必须为4到16个字符','length','4,16')
		);
	/**
	*注册时检测用户是否存在
	*@param str $u 用户名
	*@return bool 用户名已存在返回ture,用户名不存在返回false
	*/
	public function checkReg($u){
		$sql="select * from ".$this->table." where user_name="."'".$u."'";
		return $this->db->getOne($sql);
	}
	protected function encPasswd($p){
	return md5($p);
	}
	/**
	*注册的用户名不存在时，可以注册，将密码采用MD5 密码加盐 加密 并自动载入数据库
	*(加一个salt字段 ，使数据库记住这个salt以便再次读取)
	*@param arr $data 经过自动过滤等验证后的数组
	*@return boolean 加入数据库成功返回true失败返回false
	*/
	public function reg($data){
		$salt=substr(str_shuffle('aljuudJOMG9875nkbtwslncwp'),0,8);
		if ($data['pwd'] == $data['repwd']) {
			$data['pwd']=$this->encPasswd($data['pwd'].$salt);
			$data['repwd']=$data['pwd'];
			$data['salt']=$salt;
			return $this->add($data);
		}
	}
	/**
	*登录验证用户名密码是否正确
	*@param str $u post传入过来的用户名 str $p post传入过来的密码
	*@return boolean 返回true则用户名密码正确
	*/
	public function logIn($u,$p){
		//获取user表中用户名等于$u的salt的值，将用户输入的密码加盐再用MD5加密看与数据库中的pwd是否相同
		$sql="select * from ".$this->table." where user_name="."'".$u."'";
		$row=$this->db->getOne($sql);//获取数据库内用户名等于$u的一行数据，一个用户名只能返回条查询，用户名不能重复
		if (!$row) {
			return false;
		}else if($this->encPasswd($p.$row[0]['salt']) != $row[0]['pwd']){//密码只用登陆的用户知道不能伪造，所以采用这种方式比较安全
			return false;
		}else{
			return true;
		}
	}	

	/**
	*md5加密用户名和盐
	*盐存于配置文件
	*@param str $name 用户名
	*@return str 返回加密后的字符串
	*
	*/
	public function cCode($name){
		$this->conf=conf::getIns();
		return $this->encPasswd($this->conf->salt.'||||'.$name);
		
	}
	/**
	*检测用户是否登录
	*用于判断用户是否已经在登录状态
	*@return 用户名已登录返回true 未登录返回false
	*/
	public function acc(){
		if (!isset($_COOKIE['user_name']) || !isset($_COOKIE['ccode'])) {
			return false;
		}
		return $_COOKIE['ccode'] === $this->cCode($_COOKIE['user_name']);
	}
}
